ArangoDB-এর AQL (Arango Query Language) একটি শক্তিশালী কুয়েরি ভাষা, যা ডেটাবেসে জটিল ডেটা অ্যাগ্রিগেশন এবং বিশ্লেষণ করতে ব্যবহৃত হয়। অ্যাগ্রিগেশন হল ডেটা সংগ্রহের একটি প্রক্রিয়া, যেখানে এক বা একাধিক ডেটা ফিল্ডের উপর গাণিতিক বা পরিসংখ্যানিক ক্রিয়া (যেমন যোগফল, গড়, গুনফল) প্রয়োগ করা হয়।
ArangoDB-তে বিভিন্ন ধরনের অ্যাগ্রিগেশন ফাংশন এবং কৌশল রয়েছে, যেগুলি আপনাকে জটিল ডেটা বিশ্লেষণ করতে সাহায্য করবে। এখানে কিছু Advanced Aggregation Techniques নিয়ে আলোচনা করা হল:
1. GROUP BY with Aggregation Functions
একটি সাধারণ অ্যাগ্রিগেশন কৌশল হল GROUP BY ব্যবহার করা, যা ডেটা গ্রুপিং করতে সহায়তা করে এবং গ্রুপের মধ্যে অ্যাগ্রিগেটেড মান বের করতে সহায়তা করে।
উদাহরণ: GROUP BY with SUM
ধরা যাক, আমাদের কাছে একটি sales নামে সংগ্রহ রয়েছে, যেখানে product_id, sale_date, এবং sale_amount রয়েছে। আমরা যদি প্রতি প্রোডাক্টের মোট বিক্রির পরিমাণ বের করতে চাই, তাহলে আমরা GROUP BY এবং SUM() ফাংশন ব্যবহার করতে পারি:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE total_sales = SUM(sale.sale_amount)
RETURN { "product_id": product_id, "total_sales": total_sales }
এখানে:
COLLECTডেটাকেproduct_idঅনুযায়ী গ্রুপ করে।SUM()ফাংশন গ্রুপের জন্য মোট বিক্রির পরিমাণ হিসাব করে।
2. COUNT and COUNT DISTINCT
COUNT ফাংশন ব্যবহার করে আপনি কোনো গ্রুপের মধ্যে ডকুমেন্টের সংখ্যা বের করতে পারেন। COUNT DISTINCT ব্যবহার করলে আপনি শুধুমাত্র অনন্য মানের সংখ্যা পেতে পারেন।
উদাহরণ: COUNT
ধরা যাক, আমরা কতটি বিক্রির রেকর্ড আছে তা জানতে চাই:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE total_sales_count = COUNT(sale)
RETURN { "product_id": product_id, "total_sales_count": total_sales_count }
এখানে, COUNT(sale) বিক্রির রেকর্ডের সংখ্যা গননা করে।
উদাহরণ: COUNT DISTINCT
যদি আমরা কতজন ভিন্ন গ্রাহক দ্বারা বিক্রি হয়েছে তা জানতে চাই:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE unique_customers = COUNT(DISTINCT sale.customer_id)
RETURN { "product_id": product_id, "unique_customers": unique_customers }
এখানে, COUNT(DISTINCT) গ্রাহকের অনন্য সংখ্যা গননা করে।
3. AVERAGE and MEDIAN
ArangoDB-তে AVERAGE এবং MEDIAN ফাংশন ব্যবহার করে গড় এবং মধ্যম মান বের করা যায়।
উদাহরণ: AVERAGE
একটি প্রোডাক্টের গড় বিক্রি পরিমাণ বের করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE avg_sale_amount = AVERAGE(sale.sale_amount)
RETURN { "product_id": product_id, "avg_sale_amount": avg_sale_amount }
এখানে, AVERAGE(sale.sale_amount) বিক্রির গড় পরিমাণ বের করবে।
উদাহরণ: MEDIAN
একটি প্রোডাক্টের বিক্রির মধ্যম মান (মিডিয়ান) বের করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE median_sale_amount = MEDIAN(sale.sale_amount)
RETURN { "product_id": product_id, "median_sale_amount": median_sale_amount }
এখানে, MEDIAN(sale.sale_amount) বিক্রির মধ্যম মান (মিডিয়ান) বের করবে।
4. PERCENTILES and QUARTILES
ArangoDB-তে PERCENTILES এবং QUARTILES ফাংশন ব্যবহার করে আপনি ডেটার মধ্যে নির্দিষ্ট মান বের করতে পারেন, যেমন ৯০ শতাংশ বা প্রথম কোয়ার্টাইল।
উদাহরণ: PERCENTILE
একটি প্রোডাক্টের ৯০ তম শতাংশ বিক্রির পরিমাণ বের করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE percentile_90 = PERCENTILE(sale.sale_amount, 90)
RETURN { "product_id": product_id, "percentile_90": percentile_90 }
এখানে, PERCENTILE(sale.sale_amount, 90) বিক্রির ৯০ তম শতাংশ পরিমাণ বের করবে।
উদাহরণ: Quartiles
একটি প্রোডাক্টের প্রথম এবং তৃতীয় কোয়ার্টাইল বের করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE first_quartile = QUARTILE(sale.sale_amount, 1),
third_quartile = QUARTILE(sale.sale_amount, 3)
RETURN { "product_id": product_id, "first_quartile": first_quartile, "third_quartile": third_quartile }
এখানে, QUARTILE(sale.sale_amount, 1) প্রথম কোয়ার্টাইল এবং QUARTILE(sale.sale_amount, 3) তৃতীয় কোয়ার্টাইল বের করবে।
5. Array Aggregation
ArangoDB আপনাকে একটি অ্যারে সংগ্রহ করতে দেয়, যা দিয়ে আপনি গ্রুপের মধ্যে বিভিন্ন মান সংগ্রহ করতে পারেন। এই ফিচারটি ডেটার কিছু বিশেষ বৈশিষ্ট্য বা সূচক সংগ্রহ করার জন্য উপকারী।
উদাহরণ: Array Aggregation
যদি আপনি প্রতিটি প্রোডাক্টের বিক্রির পরিমাণ একটি অ্যারেতে সংগ্রহ করতে চান:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE sale_amounts = ARRAY_AGG(sale.sale_amount)
RETURN { "product_id": product_id, "sale_amounts": sale_amounts }
এখানে, ARRAY_AGG(sale.sale_amount) বিক্রির পরিমাণগুলো একটি অ্যারেতে সংরক্ষণ করবে।
6. Nested Aggregations
ArangoDB-তে আপনি nested aggregation করতে পারেন, যেখানে একাধিক স্তরে অ্যাগ্রিগেশন প্রয়োগ করা হয়। এটি আরও গভীর বিশ্লেষণের জন্য দরকারি।
উদাহরণ: Nested Aggregations
প্রথমে একটি অঞ্চলের বিক্রির মোট পরিমাণ বের করুন, তারপর সেই অঞ্চলের মধ্যে প্রতি প্রোডাক্টের গড় বিক্রি পরিমাণ বের করুন:
FOR sale IN sales
COLLECT region = sale.region INTO grouped_sales
LET avg_sales = AVERAGE(grouped_sales[*].sale_amount)
RETURN { "region": region, "avg_sales": avg_sales }
এখানে, প্রথম COLLECT স্টেটমেন্ট অঞ্চলের বিক্রির পরিমাণ গ্রুপ করে, এবং পরবর্তী LET কমান্ডে গড় বিক্রি পরিমাণ হিসাব করা হয়।
7. Window Functions (Rank, Row_Number, Lead, Lag)
ArangoDB-এর window functions আপনাকে একটি কোয়েরির ফলাফলের মধ্যে রেঙ্কিং, সাবস্ক্রিপশন, বা প্যারালাল রিডিং করার অনুমতি দেয়। এটি আপনাকে একটি নির্দিষ্ট উইন্ডো বা গ্রুপের মধ্যে কাজ করতে দেয়।
উদাহরণ: Rank using RANK()
পণ্য বিক্রির ভিত্তিতে র্যাংক নির্ধারণ করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE total_sales = SUM(sale.sale_amount)
LET rank = RANK(total_sales)
RETURN { "product_id": product_id, "total_sales": total_sales, "rank": rank }
এখানে, RANK(total_sales) প্রতিটি পণ্যের বিক্রি অনুযায়ী র্যাংক নির্ধারণ করবে।
সারাংশ
ArangoDB-তে Advanced Aggregation Techniques ডেটাবেসের বিশ্লেষণ এবং কার্যকর রিপোর্ট তৈরি করার জন্য অত্যন্ত গুরুত্বপূর্ণ। GROUP BY, COUNT DISTINCT, AVERAGE, PERCENTILE, ARRAY_AGG, Nested Aggregations এবং Window Functions আপনাকে ডেটার উপর বিস্তারিত বিশ্লেষণ করতে সাহায্য করবে। এই ফাংশনগুলি আপনার কোয়েরি কার্যক্ষমতা উন্নত করতে এবং বড় ডেটাসেটের মধ্যে গুরুত্বপূর্ণ তথ্য বের করার কাজে সহায়ক।